﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Drawing;
using QuanCafe_DAO_WS;

namespace QuanCafe
{
    public class ThucUongDAO : DataProvider
    {

        // tạo 1 string làm link dẫn đến web lưu trữ ảnh
        private static string url = "http://www.quangcaokhacviet.somee.com/Image/ThucUong/";

        // viết hàm lấy lên danh sách thức uống
        public List<ThucUongDTO> TU_LayDanhSachThucUong()
        {
            // tạo 1 biến LinkQ
            LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
            // lấy ra danh sách các thức uống hiện có, sắp xếp theo nhóm với mã thức uống tăng dần ( có thể theo đơn giá tăng dần)
            var ThucUongs = data.ThucUongs.OrderBy(temp => temp.nhom).ThenBy(temp => temp.dongia);

            // tạo 1 biến trả về
            List<ThucUongDTO> thucUongDTOs = new List<ThucUongDTO>();
            // truy vấn
            foreach(ThucUong thucUong in ThucUongs)
            {
                object obj = GetDataFromDataConText(thucUong);
                thucUongDTOs.Add((ThucUongDTO)obj);
            }
            return thucUongDTOs;
            
        }

        // viết hàm thêm một thức uống mới
        public bool TU_ThemThucUongThanhCong(string mathucuong, string tenthucuong, float dongia, string anhdaidien, string thongtin, int tinhtrang, string nhom, string cachphache, string thongtindinhduong)
        {
            try
            {
                // tạo 1 biến LinkQ
                LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
                // kiểm tra xem thức uống này đã có chưa
                if (TU_DaTonTaiThucUong(mathucuong, tenthucuong) == false) // chưa có
                {
                    // tạo ra 1 đối tượng ThucUong để add vào
                    ThucUong thucUong = new ThucUong();
                    thucUong.mathucuong = mathucuong;
                    thucUong.tenthucuong = tenthucuong;
                    thucUong.dongia = dongia;
                    thucUong.tinhtrang = tinhtrang;
                    thucUong.thongtin = thongtin;
                    thucUong.anhdaidien =  url + anhdaidien; // chi lấy ra phần tên của ảnh
                    thucUong.nhom = nhom;
                    thucUong.cachphache = cachphache;
                    thucUong.thongtindinhduong = thongtindinhduong;
                    data.ThucUongs.InsertOnSubmit(thucUong);
                    // cập nhật lại
                    data.SubmitChanges();
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch
            {
                return false;
            }
        }

        // viết hàm cập nhật ảnh đại diện của thức uống
        public bool TU_CapNhatAnhDaiDienThanhCong(string mathucuong, string anhdaidien)
        { 
            // tạo biến data
            LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
            // kiểm tra mã
            if (TU_DaTonTaiThucUong(mathucuong, "null") == true)
            {
                // lấy ra thức uống đó
                ThucUong tu = data.ThucUongs.Single(temp => temp.mathucuong == mathucuong);
                // cập nhật
                tu.anhdaidien = url + anhdaidien;
                data.SubmitChanges();
                return true;
            }
            else
            {
                return false;
            }
        }


        // viết hàm cập nhật thông tin thức uống
        public bool TU_CapNhatThucUongThanhCong(string mathucuong, string tenthucuong, float dongia, string thongtin, int tinhtrang, string nhom, string cachphache, string thongtindinhduong)
        { 
            // tạo biến data
            LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
            // kiểm tra mã
            if (TU_DaTonTaiThucUong(mathucuong, "null") == true)
            {
                // lấy ra thức uống đó
                ThucUong tu = data.ThucUongs.Single(temp => temp.mathucuong == mathucuong);
                // tiến hành cập nhật
                tu.tenthucuong = tenthucuong;
                tu.dongia = dongia;
                tu.thongtin = thongtin;
                tu.tinhtrang = tinhtrang;
                tu.nhom = nhom;
                tu.cachphache = cachphache;
                tu.thongtindinhduong = thongtindinhduong;
                // cập nhật thay đổi
                data.SubmitChanges();
                // trả về kết quả
                return true;
            }
            else
            {
                return false;
            }
        }

        // viết hàm cập nhật tình trạng thức uống
        public bool Tu_CapNhatTinhTrangThucUong(string mathucuong, int tinhtrang)
        {
            // tạo biến data
            LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
            // kiểm tra mã
            if (TU_DaTonTaiThucUong(mathucuong, "null") == true)
            {
                // lấy ra thức uống đó
                ThucUong tu = data.ThucUongs.Single(temp => temp.mathucuong == mathucuong);
                // tiến hành cập nhật
                tu.tinhtrang = tinhtrang;
                // cập nhật thay đổi
                data.SubmitChanges();
                // trả về kết quả
                return true;
            }
            else
            {
                return false;
            }
        }


        // viết hàm xóa thức uống -> thực ra chỉ thay đổi tình trạng
        public bool TU_XoaThucUongThanhCong(string mathucuong)
        { 
            // tạo biến data
            LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
            // kiểm tra thức uống
            if (TU_DaTonTaiThucUong(mathucuong, "null") == true)
            {
                // lấy ra thức uống đó
                ThucUong tu = data.ThucUongs.Single(temp => temp.mathucuong == mathucuong);
                // cập nhật lại trạng thái
                data.ThucUongs.DeleteOnSubmit(tu);
                data.SubmitChanges();
                return true;
            }
            else
            {
                return false;
            }
        }

        // viết hàm xóa toàn bộ thức uống
        public bool TU_XoaToanBoThucUong()
        {
            try
            {
                // tạo biến data
                LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
                // lấy ra thức uống
                var thucUongs = data.ThucUongs.Where(temp => true);
                // xóa
                data.ThucUongs.DeleteAllOnSubmit(thucUongs);
                // cập nhật thay đổi
                data.SubmitChanges();
                // trả về kết quả
                return true;
            }
            catch
            {
                return false;
            }
        }

        // viết hàm xóa những thức uống thuộc 1 nhóm
        public bool TU_XoaThucUongCuaNhom(string manhom)
        {
            try
            {
                // tạo biến data
                LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
                // lấy ra thức uống
                var thucUongs = data.ThucUongs.Where(temp => temp.nhom == manhom);
                // xóa
                data.ThucUongs.DeleteAllOnSubmit(thucUongs);
                // cập nhật thay đổi
                data.SubmitChanges();
                // trả về kết quả
                return true;
            }
            catch
            {
                return false;
            }
        }

        // viết hàm kiểm tra xem thức uống có tồn tại hay không
        public bool TU_DaTonTaiThucUong(string mathucuong, string tenthucuong)
        {
            // tạo 1 biến LinkQ
            LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
            // lấy ra danh sách những thức uống đã có 
            var thucUongs = data.ThucUongs.Where(temp => true);

            // kiểm tra: Any(điều kiện): có bất kì phần tử nào thỏa không?
            if (thucUongs.Any(temp => (temp.mathucuong == mathucuong || temp.tenthucuong == tenthucuong)))
            {
                return true;
            }
            else
            {
                return false;
            }
        }


        #region Các hàm liên quan đến truy vấn

        // viết hàm xem thông tin một thức uống
        public ThucUongDTO TU_XemThongTinThucUong(string mathucuong)
        {
            // tạo biến data
            LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
            // kiểm tra xem có thức uống này không
            if (TU_DaTonTaiThucUong(mathucuong, "null") == true)
            {
                // lấy ra thức uống đó
                ThucUong tu = data.ThucUongs.Single(temp => temp.mathucuong == mathucuong);
                // tạo biến trả về
                ThucUongDTO thucUongDTO = new ThucUongDTO();
                thucUongDTO = (ThucUongDTO)GetDataFromDataConText(tu);
                return thucUongDTO;
            }
            else
            {
                return null;
            }
        }

        // lấy thức uống theo tên
        public List<ThucUongDTO> TU_TraThucUongTheoTen(string tenthucuong)
        {
            // tạo 1 biến LinkQ
            LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
            // lấy ra danh sách những thức uống hiện tại có trong CSDL
            var ThucUongs = data.ThucUongs.Where(temp => temp.tenthucuong.StartsWith(tenthucuong) == true);
            // tạo 1 biến trả về
            List<ThucUongDTO> thucUongDTOs = new List<ThucUongDTO>();
            // truy vấn
            foreach (ThucUong thucUong in ThucUongs)
            {
                    object obj = GetDataFromDataConText(thucUong);
                    thucUongDTOs.Add((ThucUongDTO)obj);
            }
            return thucUongDTOs;
        }

        // viết hàm tra thức uống theo mã
        public List<ThucUongDTO> TU_TraThucUongTheoMaThucUong(string mathucuong)
        {
            // tạo 1 biến LinkQ
            LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
            // lấy ra danh sách những thức uống hiện tại có trong CSDL
            var ThucUongs = data.ThucUongs.Where(temp => temp.mathucuong.StartsWith(mathucuong) == true);
            // tạo 1 biến trả về
            List<ThucUongDTO> thucUongDTOs = new List<ThucUongDTO>();
            // truy vấn
            foreach (ThucUong thucUong in ThucUongs)
            {
                object obj = GetDataFromDataConText(thucUong);
                thucUongDTOs.Add((ThucUongDTO)obj);
            }
            return thucUongDTOs;
        }

        // lấy thức uống theo mã nhóm
        public List<ThucUongDTO> TU_TraThucUongTheoNhom(string manhom)
        {
            // tạo 1 biến LinkQ
            LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
            // lấy ra danh sách những thức uống hiện tại có trong CSDL
            var ThucUongs = data.ThucUongs.Where(temp => temp.nhom.StartsWith(manhom) == true).OrderBy( temp => temp.dongia);
            // tạo 1 biến trả về
            List<ThucUongDTO> thucUongDTOs = new List<ThucUongDTO>();
            // truy vấn
            foreach (ThucUong thucUong in ThucUongs)
            {
                    object obj = GetDataFromDataConText(thucUong);
                    thucUongDTOs.Add((ThucUongDTO)obj);
            }
            return thucUongDTOs;
        }

        // lấy thức uống theo đơn giá
        public List<ThucUongDTO> TU_TraThucUongTheoDonGia(float dongia)
        {
            // tạo 1 biến LinkQ
            LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
            // lấy ra danh sách những thức uống hiện tại có trong CSDL
            var ThucUongs = data.ThucUongs.Where(temp => temp.dongia == dongia).OrderBy(temp => temp.nhom);
            // tạo 1 biến trả về
            List<ThucUongDTO> thucUongDTOs = new List<ThucUongDTO>();
            // truy vấn
            foreach (ThucUong thucUong in ThucUongs)
            {
                    object obj = GetDataFromDataConText(thucUong);
                    thucUongDTOs.Add((ThucUongDTO)obj);
            }
            return thucUongDTOs;
        }

        // lấy thức uống theo tình trạng
        public List<ThucUongDTO> TU_TraThucUongTheoTinhTrang(int tinhtrang)
        {
            // tạo 1 biến LinkQ
            LinkQ2QuanCafeDataContext data = new LinkQ2QuanCafeDataContext();
            // lấy ra danh sách những thức uống hiện tại có trong CSDL thỏa điều kiện
            var ThucUongs = data.ThucUongs.Where(temp => temp.tinhtrang == tinhtrang).OrderBy(temp => temp.nhom).ThenBy(temp => temp.dongia);
            // tạo 1 biến trả về
            List<ThucUongDTO> thucUongDTOs = new List<ThucUongDTO>();
            // truy vấn
            foreach (ThucUong thucUong in ThucUongs)
            {
                    object obj = GetDataFromDataConText(thucUong);
                    thucUongDTOs.Add((ThucUongDTO)obj);
            }
            return thucUongDTOs;
        }


        #endregion


        // viết lại hàm GetDataFromDataRow
        private  object GetDataFromDataConText(ThucUong tu)
        {
            ThucUongDTO thucUongDTO = new ThucUongDTO();
            thucUongDTO.Anhdaidien = tu.anhdaidien;
            thucUongDTO.Mathucuong = tu.mathucuong;
            thucUongDTO.Tenthucuong = tu.tenthucuong;
            thucUongDTO.Dongia = (float)tu.dongia;
            thucUongDTO.Nhom = tu.nhom;
            thucUongDTO.Tinhtrang = (int)tu.tinhtrang;
            thucUongDTO.Thongtin = tu.thongtin;
            thucUongDTO.Cachphache = tu.cachphache;
            thucUongDTO.Thongtindinhduong = tu.thongtindinhduong;

            return (object)thucUongDTO;
        }

    }
}
